Cocos Creator 如何处理物理和碰撞检测? | 您所在的位置:网站首页 › cocos creator分包 › Cocos Creator 如何处理物理和碰撞检测? |
Cocos Creator 如何处理物理和碰撞检测?
cocos creator 版本:v3.6.1 Cocos Creator 3.x 实现碰撞检测Cocos Creator 通过使用物理引擎来处理物理和碰撞检测。Cocos Creator 默认使用 Box2D 物理引擎,也支持使用 Chipmunk 物理引擎。以下是处理物理和碰撞检测的基本步骤: 1、创建物理世界:在场景中添加一个物理组件,这将自动创建一个物理世界。 2、添加刚体组件:在需要添加物理效果的节点上添加刚体组件。刚体是物理世界中的物体,可以设置质量、摩擦力、弹性等属性(点击官方文档查看刚体属性)。 3、添加碰撞体组件:在刚体节点上添加碰撞体组件,用于检测碰撞。Cocos Creator 支持多种类型的碰撞体,如矩形、圆形、多边形等(点击官方文档查看碰撞组件)。 4、处理碰撞事件(碰撞回调函数):通过添加碰撞回调函数,在节点之间发生碰撞时执行相应的逻辑。可以在碰撞回调函数中获取到碰撞的详细信息,如碰撞体的类型、碰撞点、碰撞法线等(点击官方文档查看碰撞回调)。 下面是一个简单的例子,演示如何在 Cocos Creator 中处理物理和碰撞检测: 5、创建一个场景,并添加一个物理组件。 6、在场景中添加两个节点,都分别添加刚体和碰撞体组件: 按照需求选择对应刚体类型(点击官方文档查看刚体类型) 7、开启碰撞监听: 只有开启了刚体的碰撞监听,刚体发生碰撞时才会回调到对应的组件上 //代码开启 rigidbody.enabledContactListener = true;8、在其中一个节点上添加一个碰撞回调函数: @ccclass('TestContactCallBack') export class TestContactCallBack extends Component {start () {// 注册单个碰撞体的回调函数let collider = this.getComponent(Collider2D);if (collider) {collider.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);collider.on(Contact2DType.END_CONTACT, this.onEndContact, this);collider.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);collider.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);}// 注册全局碰撞回调函数if (PhysicsSystem2D.instance) {PhysicsSystem2D.instance.on(Contact2DType.BEGIN_CONTACT, this.onBeginContact, this);PhysicsSystem2D.instance.on(Contact2DType.END_CONTACT, this.onEndContact, this);PhysicsSystem2D.instance.on(Contact2DType.PRE_SOLVE, this.onPreSolve, this);PhysicsSystem2D.instance.on(Contact2DType.POST_SOLVE, this.onPostSolve, this);}}onBeginContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 只在两个碰撞体开始接触时被调用一次console.log('onBeginContact');}onEndContact (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 只在两个碰撞体结束接触时被调用一次console.log('onEndContact');}onPreSolve (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 每次将要处理碰撞体接触逻辑时被调用console.log('onPreSolve');}onPostSolve (selfCollider: Collider2D, otherCollider: Collider2D, contact: IPhysics2DContact | null) {// 每次处理完碰撞体接触逻辑时被调用console.log('onPostSolve');} }说明:注意刚体类型一定要选择好,两个节点都是static是无法触发碰撞回调(查看不同刚体类型响应限制条件) 不同类型的刚体之间,并非都可进行碰撞,其结果整理如下: –StaticDynamicKinematicAnimatedStatic√√√Dynamic√√√√Kinematic√√√√Animated√√√√9、将代码添加到节点中,如下: 10、结果显示 可以通过缓动系统移过蓝色五角星,代码比如: tween(this.node.getChildByName("Block")).to(1,{position:new Vec3(200,0,0)}).start();通过以上步骤,就可以在 Cocos Creator 中处理物理和碰撞检测。可以通过调整刚体、碰撞体的属性以及添加更多的碰撞回调函数,来实现更加复杂的物理效果和碰撞检测。 |
CopyRight 2018-2019 实验室设备网 版权所有 |